// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"
#include "../SQLObjectImpl.h"
#include "SQLDDLStatement.h"

class SQLAlterIndexStatement_Rebuild : virtual public SQLObjectImpl
{
public:
  SQLObject_ptr option;

  SHAREDOBJECT(SQLAlterIndexStatement_Rebuild);
  SQLObject_ptr getOption();

  void setOption(SQLObject_ptr option);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);
};

class SQLAlterIndexStatement : virtual public SQLStatementImpl /*implements SQLAlterStatement*/
{
  public:
  SQLName_ptr name;
  SQLName_ptr renameTo;
  SQLExprTableSource_ptr table;
  BOOL_ptr compile;
  BOOL_ptr enable;
  BOOL_ptr unusable;
  BOOL_ptr monitoringUsage;
  SQLAlterIndexStatement_Rebuild_ptr rebuild;
  SQLExpr_ptr parallel;
  SQLAssignItem_list_ptr partitions;
  SQLPartitionBy_ptr dbPartitionBy;

  SQLAlterIndexStatement();
  SHAREDOBJECT(SQLAlterIndexStatement);
  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  SQLName_ptr getRenameTo();

  void setRenameTo(SQLName_ptr renameTo);

  SQLExpr_ptr getParallel();

  void setParallel(SQLExpr_ptr parallel);

  BOOL_ptr getMonitoringUsage();

  void setMonitoringUsage(BOOL_ptr monitoringUsage);

  SQLAlterIndexStatement_Rebuild_ptr getRebuild();

  void setRebuild(SQLAlterIndexStatement_Rebuild_ptr rebuild);

  SQLName_ptr getName();

  void setName(SQLName_ptr name);

  BOOL_ptr isCompile();

  void setCompile(BOOL_ptr compile);

  BOOL_ptr getEnable();

  void setEnable(BOOL_ptr enable);

  BOOL_ptr isUnusable();

  void setUnusable(BOOL_ptr unusable);

  SQLExprTableSource_ptr getTable();

  void setTable(SQLName_ptr x);

  void setTable(SQLExprTableSource_ptr x);

  SQLAssignItem_list_ptr getPartitions();

  SQLPartitionBy_ptr getDbPartitionBy();

  void setDbPartitionBy(SQLPartitionBy_ptr x);

  // @Override
  SQLDDLStatement::DDLObjectType getDDLObjectType();
};
